package com.zhss.designpattern.adapter;

/**
 * 适配器模式demo
 * @author zhonghuashishan
 *
 */
public class AdapterPatterDemoPractice {

	public static void main(String[] args) {
		//这样看起来新老接口的实现风格就一样了
		Adapter adapter = new Adapter(new OldInterfaceImpl());
		adapter.newExcute();
		NewInterfaceImpl newInterface = new NewInterfaceImpl();
		newInterface.newExcute();

		// 适配器模式
		// 就是你手上有新老俩接口和一个老接口的实现类
		// 但是现在系统中要面向新接口来开发，老接口的实现类就不能直接用了，不能直接面向老接口来开发
		// 开发一个老接口到新接口的一个适配器
		// 适配器是实现了新接口的，但是适配器中持有老接口实现类实例的引用
		// 适配器的新接口方法的实现，全部基于老接口实现类的老方法来实现即可
		// 对于调用方而言，只要使用适配器来开发即可，就可以通过面向新接口开发，底层使用老接口实现类
	}

	/**
	 * 老系统的接口
	 */
	public interface OldInterface{
		void oldExcute();
	}

	public static class OldInterfaceImpl implements OldInterface{
		public void oldExcute() {
			System.out.println("这是老接口的实现");
		}
	}
	/**
	 * 新系统的接口
	 */
	public interface NewInterface{
		void newExcute();
	}

	public static class NewInterfaceImpl implements NewInterface{
		public void newExcute() {
			System.out.println("这是新接口的实现");
		}
	}

	/**
	 * 现在只能使用新系统的接口方式来定义
	 * 定义一个新系统风格的adapter
	 */
	public static class Adapter  implements NewInterface{
		private OldInterfaceImpl oldInterface;

		public  Adapter (OldInterfaceImpl oldInterface ){
			this.oldInterface=oldInterface;
		}

		public void newExcute() {
			oldInterface.oldExcute();
		}
	}

}
